<!-- Start Document Outline -->

* [https://t.me/nodeua/](#httpstmenodeua)
	* [Global and require](#global-and-require)

<!-- End Document Outline -->

# https://t.me/nodeua/
## Global and require
@tshemsedinov 
Добрый день. Вопрос по текущей реализации стартеркита: 
- В классе Application на 30 строке добавляется в глобал контекст апликейшна (global.application = this;). 
Если я правильно понимаю, теперь из любого места в приложении можно будет обратиться к нему и к его основным зависимостям. 
Подскажите, пожалуйста, почему Вы решили предоставлять доступ к application именно через global?

Timur Shemsedinov, [29.03.20 16:43]
[В ответ на Dmitry]
Я чуть позже уберу require из всех частей приложения и оставлю их только в загрузчике. Прикладной код будет получать ссылки на зависимости через dependency injection в sandbox а системный слой через global. Глобал для формирования пространства имен - это хорошо. Глобал - для глобальных переменные это плохо. Requie для импорта интерфейсов - это хорошо, но require для экспорта/импорта структур данных - это плохо. Как только структуры данных становятся глобольными, то весь код становится сильно зацепленным (coupling) и в принципе все тогда можно положить в один файл, нет модульности. Модули должны взаимодействовать через интерфейсы, а не через данные. Но вот передавать ссылки на интерфейсы из модуля в модуль можно любым доступным способом.

Timur Shemsedinov, [29.03.20 16:43]
[В ответ на Dmitry]
Я чуть позже уберу require из всех частей приложения и оставлю их только в загрузчике. Прикладной код будет получать ссылки на зависимости через dependency injection в sandbox а системный слой через global. Глобал для формирования пространства имен - это хорошо. Глобал - для глобальных переменные это плохо. Requie для импорта интерфейсов - это хорошо, но require для экспорта/импорта структур данных - это плохо. Как только структуры данных становятся глобольными, то весь код становится сильно зацепленным (coupling) и в принципе все тогда можно положить в один файл, нет модульности. Модули должны взаимодействовать через интерфейсы, а не через данные. Но вот передавать ссылки на интерфейсы из модуля в модуль можно любым доступным способом.

Timur Shemsedinov, [29.03.20 17:06]
[В ответ на 👨🏼‍💻 Mr. 🅺 🍎🍀]
Везде будут делать. Потому, что для думающего человека глабал можно, а require не всегда хорошо. Ну если у человека закомпостированеые мозги и он считает что global нельзя просто потому, что нельзя и не понимает почему именно, ну тогда ему require не поможет, он через require напишет такой же говно.

Timur Shemsedinov, [29.03.20 17:08]
Require неявно создает синглтон, а синглтон - это то же, что и глобал. Главная идея в связывании через интерфейсы, а не через данные.